import java.util.DoubleSummaryStatistics;

//演示overload的便利和通过this的方法便利与形参列表直接写成属性名
public class Main {
    public static void main(String[] args) {
//        Person01 p1 = new Person01();
//        System.out.println(p1.Tools(1,1));//返回类型为int
//        Person01 p2 = new Person01();
//        System.out.println(p2.Tools(1,1.0));//返回类型为double
//        System.out.println(p1==p2);//判断两个对象是否占用同一个存储空间
//        Person01 p3 = new Person01();
//        int ans = p3.Sums(6);
//        System.out.println(ans);//可变参数的方便性
        Person01 p4 = new Person01("kd",35);
        System.out.println(p4.name);
        System.out.println(p4.age);
    }
}

//方法的重载：允许在同一个类中，多个方法同名的而存在，但要求形参列表不同。
//注意事项:构成方法重载注意事项：
//1.	方法名必须一样
//2.	形参列表必须不同（参数类型，参数个数，参数顺序），参数名要一样，否则编译时会报方法多次定义
//3.	返回类型：无要求（特例：当方法名和形参列表相同时，返回类型不同，构成不了方法重载，是方法的重复定义)
class Person01 {
    String name;
    int age;

    public int Tools(int x, int y) {
        return x = y;
    }

    public double Tools(int x, double y) {
        return x + y;
    }

    //可变参数的利用：优化以上的求和方法，不需要手动写很多代码来实现
    public int Sums(int... sum) {//可变参数的实参可以认为是数组
        int res = 0;
        for (int i = 0; i < sum.length; i++) {
            res += sum[i];
        }
        return res;
    }

    //构造器的使用:可直接对对象中的实参进行初始化。
    //注意：不是创建对象，而是直接进行初始化
//    public Person01(String pname,int page){//此构造器一定义，前面的p1,p2,p3这些对象就会报错，
//        // 因为它们以为是给他们初始化，实则上述的p1,p2,p3是引出可变参数的引出
//            name = pname;
//            age = page;
//    }
    //我想将pname和page也写成和属性中的名字一样，这就要用到this。
    public Person01(String name,int age){
        this.name = name;
        this.age = age;
        //this是指当前属性的变量
    }

}
